package org.iot.iotserver.service;

import io.netty.channel.Channel;
import io.netty.channel.ChannelId;

import java.util.List;
import java.util.Optional;
import java.util.function.Predicate;

/**
 * IOT 的一些公共服务
 */
public interface IIOTCommonService {

    /**
     * 获取通道数量
     * @return
     */
    long getChannelSize();

    /**
     * 新增一条 channel
     * @param channel
     */
    void addChannel(Channel channel);

    /**
     * 删除 channel
     * @param channelId
     */
    void removeChannel(ChannelId channelId);

    /**
     * 查找 channel
     * @param predicate
     * @return
     */
    Optional<Channel> findFirstChannel(Predicate<Channel> predicate);

    /**
     * 查找 channel
     * @param predicate
     * @return
     */
    List<Channel> findChannels(Predicate<Channel> predicate);

    /**
     * 向 channel 配置属性
     * @param channelId
     * @param attrKey
     * @param attr
     */
    void setAttr(ChannelId channelId, String attrKey, Object attr);

    /**
     * 从 channel 中获取属性
     * @param channelId
     * @param attrKey
     */
    Object getAttr(ChannelId channelId, String attrKey);

    /**
     * 从 channel 中移除属性
     * @param channelId
     * @param attrKey
     */
    Object removeAttr(ChannelId channelId, String attrKey);
}
